﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Arquitectura.SEM;
using System.Data;

namespace FAS.SEM.ClasesSEM
{
    public class ProfesorSEM : AbstractSem
    {
        /*Atributos Globales*/
        private String correo,nombre;
        private int tipo;
    
        /********************************************************
        /* _construct()
        /* Proposito: inicializar el objeto.
        /* Parametros : ninguno
        /* Limitaciones: ninguna.
        /* Retorna: ninguna
        /*********************************************************/    
        public ProfesorSEM() : base()
        {
        }
    
        /********************************************************
        /* llenarProfesor(string correo, string nombre, int tipo)
        /* Proposito: inicializar el objeto con ciertos valores.
        /* Parametros : correo,nombre y tipo
        /* Limitaciones: ninguna.
        /* Retorna: ninguna
        /*********************************************************/    
        public void llenarProfesor(String correo,String nombre, int tipo)
        {
            this.correo = correo;
            this.nombre = nombre;
            this.tipo = tipo;
            this.insertar();
        }
    
        /********************************************************
        /* getCorreo()
        /* Proposito: regresar atributo correo.
        /* Parametros : ninguno
        /* Limitaciones: debe de ser diferente de null.
        /* Retorna: el valor de correo
        /*********************************************************/    
        public String getCorreo()
        {
            return this.correo; 
        }
    
        /********************************************************
        /* getNombre()
        /* Proposito: regresar atributo nombre.
        /* Parametros : ninguno
        /* Limitaciones: debe de ser diferente de null.
        /* Retorna: el valor de nombre.
        /*********************************************************/
        public String getNombre()
        {
             return this.nombre; 
        }
    
        /********************************************************
        /* getTipo()
        /* Proposito: regresar atributo nombre.
        /* Parametros : ninguno
        /* Limitaciones: debe de ser diferente de null.
        /* Retorna: el valor de tipo
        /* números.
        /*********************************************************/
        public int getTipo()
        {
            return this.tipo; 
        }
   
        /********************************************************
        /* setCorreo(string correo)
        /* Proposito: cambiar el valor del atributo correo.
        /* Parametros : correo
        /* Limitaciones: el nuevo valor debe de ser diferente de null.
        /* Retorna: nada
        /*********************************************************/    
        public void setCorreo(String correo)
        {
            if(correo != null)
                this.correo = correo; 
        }
    
        /********************************************************
        /* setNombre(string nombre)
        /* Proposito: cambiar el valor del atributo nombre.
        /* Parametros : nombre
        /* Limitaciones: el nuevo valor debe de ser diferente de null.
        /* Retorna: nada
        /*********************************************************/
        public void setNombre(String nombre)
        {
            if(nombre!= null)
                this.nombre = nombre; 
        }
    
        /********************************************************
        /* setTipo(int tipo)
        /* Proposito: cambiar el valor del atributo tipo.
        /* Parametros : tipo
        /* Limitaciones: el nuevo valor debe de ser diferente de null.
        /* Retorna: nada
        /*********************************************************/
        public void setTipo(int tipo)
        {
            this.tipo = tipo; 
        }
    
        /********************************************************
        /* validaProfesor(string password)
        /* Proposito: validar la existencia de un profesor en la base de datos.
        /* Parametros : password del profesor que NO es almacenada, solo se usa como parametro a validar en servidor de ITESM Mty
        /* Limitaciones: profesor inicializado.
        /* Retorna: Verdadero o Falso
        /*********************************************************/
        public Boolean validaProfesor(String password)
        {
            DataTable dt = new ConexionMySQLSEM().GetQuery("SELECT * from `Profesor` where Correo = '"+this.correo+"'").Tables[0];
            if (dt.Rows.Count > 0)
            {
                return true;
                //return Arquitectura.SEM.ValidaSEM.validar(correo, password);
            }
            return false;
        }

        /********************************************************
        /* comandos()
        /* Proposito: validar la existencia de un profesor en la base de datos.
        /* Parametros : ninguno
        /* Limitaciones: profesor inicializado.
        /* Retorna: Verdadero o Falso
        /*********************************************************/

        protected override void comandos()
        {
            this.id = "correo";
            this.tabla = "`Profesor`";
            this.strDelete = "DeleteProfesor";
            this.strInsertar = "InsertarProfesor";
            this.strUpdate = "UpdateProfesor";
        }
    
        /********************************************************
        /* fillFas(mysql_row row)
        /* Proposito: inicializar un profesor con la info de la base de datos.
        /* Parametros : row de consulta
        /* Limitaciones: row completo mysql
        /* Retorna: Ninguna
        /*********************************************************/
        protected override void fillSem(DataRow row)
        {
            int x = -1;
            this.correo = row[++x].ToString();
            this.nombre = row[++x].ToString();
            this.tipo = int.Parse(row[++x].ToString());
        }

        /********************************************************
        /* get(int id)
        /* Proposito: inicializar un profesor a partir de un id desde una base de datos.
        /* Parametros : id del profesor
        /* Limitaciones: Ninguna
        /* Retorna: Profesor
        /*********************************************************/
        public override AbstractSem get(Object id)
        {
            AbstractSem abs = getAbstractSem(id, this.tabla, this.id);
            return abs;
        }
    

        /********************************************************
        /* getAll
        /* Proposito: inicializar lista de profesores existentes desde una base de datos.
        /* Parametros : Ninguna
        /* Limitaciones: Ninguna
        /* Retorna: Lista de Profesores
        /*********************************************************/

        public List<ProfesorSEM> getAll()
        {
            List<AbstractSem> abs = base.getAll();
            List<ProfesorSEM> lst = new List<ProfesorSEM>();
            foreach (var v in abs)
                lst.Add((ProfesorSEM)v);
            return lst;
        }

        /********************************************************
        /* getAtributos()
        /* Proposito: regresar arreglo de atributos locales
        /* Parametros : Ninguna
        /* Limitaciones: Ninguna
        /* Retorna: Arreglo
        /*********************************************************/

        public override Dictionary<String, Object> getAtributos()
        {
            Dictionary<string, object> diccionario = new Dictionary<string, object>();
            diccionario.Add("CorreoP", correo);
            diccionario.Add("NombreP", nombre);
            diccionario.Add("TipoP", tipo);
            return diccionario;
        }
    }// fin de la clase profesor
}
